]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
workspacesView/workspacesDisplay: Don't sync geometry when animating
authorGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>
Wed, 30 Dec 2020 22:59:02 +0000 (19:59 -0300)
committerMarge Bot <marge-bot@gnome.org>
Wed, 3 Feb 2021 20:30:30 +0000 (20:30 +0000)
Synchronizing the actual geometry while animating from / to the overview can
break the animation. Let's prevent that. This code will go away soon anyway,
but to not lose bisectability, it's better not to leave it misbehaving until
then.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1613>

js/ui/workspacesView.js

index 36a15a71ff5ca47b19b8ea2b13d476f4bb878332..ac0729dd07f33fc5d1216f77124a7bdd710442c2 100644 (file)
@@ -515,6 +515,7 @@ class WorkspacesDisplay extends St.Widget {
 
         this._gestureActive = false; // touch(pad) gestures
         this._canScroll = true; // limiting scrolling speed
+        this._animating = false;
 
         this.connect('destroy', this._onDestroy.bind(this));
     }
@@ -690,6 +691,8 @@ class WorkspacesDisplay extends St.Widget {
     }
 
     animateFromOverview() {
+        this._animating = true;
+
         for (let i = 0; i < this._workspacesViews.length; i++)
             this._workspacesViews[i].animateFromOverview();
 
@@ -703,10 +706,13 @@ class WorkspacesDisplay extends St.Widget {
             x, y, width, height,
             duration: ANIMATION_TIME,
             mode: Clutter.AnimationMode.EASE_OUT_QUAD,
+            onStopped: () => (this._animating = false),
         });
     }
 
     vfunc_hide() {
+        this._animating = false;
+
         if (this._restackedNotifyId > 0) {
             Main.overview.disconnect(this._restackedNotifyId);
             this._restackedNotifyId = 0;
@@ -739,6 +745,8 @@ class WorkspacesDisplay extends St.Widget {
     }
 
     _updateWorkspacesViews() {
+        this._animating = false;
+
         for (let i = 0; i < this._workspacesViews.length; i++)
             this._workspacesViews[i].destroy();
 
@@ -815,6 +823,9 @@ class WorkspacesDisplay extends St.Widget {
 
         this._syncActualGeometryLater =
             Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => {
+                if (this._animating)
+                    return GLib.SOURCE_CONTINUE;
+
                 this._syncWorkspacesActualGeometry();
 
                 this._syncActualGeometryLater = 0;